package com.xuetang9.controller.ls;

import com.xuetang9.domain.Pole;
import com.xuetang9.service.ls.PoleService;
import com.xuetang9.utils.LoggerUtils;
import com.xuetang9.vo.JsonResultVO;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @description:
 * @author: 可爱的李四
 * @createTime: 2020/5/13 14:21
 * @version: 1.0.0
 * @place: 公司
 * @copyright: 老九学堂
 */
@Controller
@CrossOrigin    // 跨域请求
@ResponseBody   // 自动将Java对象转换为Json对象
public class PoleController {

    // 创建杆塔管理业务对象
    @Autowired
    PoleService poleService;

    /**
     * 添加杆塔信息
     * @param pole 需要添加的杆塔信息
     * @return
     */
    @PostMapping("/pole/add")
    public JsonResultVO<Pole> addPole(@RequestBody Pole pole) {

        LoggerUtils.info("传入杆塔信息：{}",pole);

        // 定义一个用于返回ajax请求的JSON对象
        JsonResultVO<Pole> jsonResultVO = new JsonResultVO<>();

        // 判断添加的杆塔信息是否为空
        if (pole == null) {
            jsonResultVO.setMessage("杆塔信息为空！！！");
            return jsonResultVO;
        }

        // 判断杆塔的编号是否满足10位
        if (pole.getPoleId().length() != 10) {
            jsonResultVO.setMessage("杆塔编号为10位！！！");
            return jsonResultVO;
        }

        // 查询要添加的杆塔的编号是否存在
        Pole repeat = poleService.selectPoleByPoleId(pole.getPoleId());
        if (repeat != null) {
            jsonResultVO.setMessage("杆塔编号已存在！！！");
            return jsonResultVO;
        }

        // 添加是否成功
        int add = poleService.insertPole(pole);
        if (add != 1) {
            jsonResultVO.setMessage("添加失败！！！");
            return jsonResultVO;
        }

        jsonResultVO.setData(pole);
        jsonResultVO.setCode(200);
        jsonResultVO.setMessage("添加成功！！！");

        return jsonResultVO;
    }

    /**
     * 根据杆塔编号删除杆塔信息
     * @param pole 需要删除的杆塔信息，（杆塔编号）
     * @return
     */
    @PostMapping("/pole/delete")
    public JsonResultVO<Pole> deletePole(@RequestBody Pole pole) {
        // 定义一个用于返回ajax请求的JSON对象
        JsonResultVO<Pole> jsonResultVO = new JsonResultVO<>();
        String poleId = pole.getPoleId();
        LoggerUtils.info("传入的杆塔编号：{},长度：{}",poleId,poleId.length());

        // 判断杆塔编号是否为null或为空字符串
        if (poleId == null || poleId == "") {
            jsonResultVO.setMessage("杆塔编号不能为null或为空字符串！！！");
            return jsonResultVO;
        }

        // 判断杆塔的编号是否为10位
        if (poleId.length() != 10) {
            jsonResultVO.setMessage("杆塔编号不为10位！！！");
            return jsonResultVO;
        }

        // 判断杆塔是否存在
        Pole repeat = poleService.selectPoleByPoleId(poleId);
        if (repeat == null) {
            jsonResultVO.setMessage("杆塔信息不存在！！！");
            return jsonResultVO;
        }

        // 删除是否成功
        int delete = poleService.deletePole(poleId);
        if (delete != 1) {
            jsonResultVO.setMessage("删除失败！！！");
            return jsonResultVO;
        }

        jsonResultVO.setMessage("删除成功！！！");
        jsonResultVO.setCode(200);
        return jsonResultVO;
    }

    /**
     * 修改杆塔信息
     * @param pole 修改的杆塔信息
     * @return
     */
    @PostMapping("/pole/update")
    public JsonResultVO<Pole> updatePole(@RequestBody Pole pole) {
        // 定义一个用于返回ajax请求的JSON对象
        JsonResultVO<Pole> jsonResultVO = new JsonResultVO<>();

        // 判断修改的杆塔信息是否为空
        if (pole == null) {
            jsonResultVO.setMessage("杆塔信息为空！！！");
            return jsonResultVO;
        }

        // 判断杆塔的编号是否满足10位
        if (pole.getPoleId().length() != 10) {
            jsonResultVO.setMessage("杆塔编号不为10位！！！");
            return jsonResultVO;
        }

        // 查询要修改的杆塔的编号是否存在
        Pole repeat = poleService.selectPoleByPoleId(pole.getPoleId());
        if (repeat == null) {
            jsonResultVO.setMessage("杆塔编号不存在！！！");
            return jsonResultVO;
        }

        // 修改是否成功
        int delete = poleService.updatePole(pole);
        if (delete == -1) {
            jsonResultVO.setMessage("修改失败！！！");
            return jsonResultVO;
        }

        jsonResultVO.setMessage("修改成功！！！");
        jsonResultVO.setData(pole);
        jsonResultVO.setCode(200);

        return jsonResultVO;
    }

    /**
     * 根据杆塔编号查找杆塔信息
     * @param poleId 杆塔编号
     * @return
     */
    @GetMapping("/pole/number/query")
    public JsonResultVO<Pole> selectByPoleId(String poleId) {
        // 定义一个用于返回ajax请求的JSON对象
        JsonResultVO<Pole> jsonResultVO = new JsonResultVO<>();

        // 判断编号是否为null或为空字符串
        if (poleId == null || poleId == "") {
            jsonResultVO.setMessage("杆塔编号不能为null或为空字符串！！！");
            return jsonResultVO;
        }

        // 判断杆塔的编号是否为10位
        if (poleId.length() != 10) {
            jsonResultVO.setMessage("杆塔编号不为10位！！！");
            return jsonResultVO;
        }

        // 保存查询到的杆塔信息
        Pole pole = poleService.selectPoleByPoleId(poleId);

        // 判断是否查询到
        if (pole != null) {
            jsonResultVO.setData(pole);
            jsonResultVO.setMessage("查询成功！！！");
            jsonResultVO.setCode(200);
            return jsonResultVO;
        }else {
            jsonResultVO.setMessage("查询失败！！！");
            return jsonResultVO;
        }

    }

    /**
     * 根据杆塔线路查找杆塔信息
     * @param poleAddress 杆塔线路
     * @return
     */
    @GetMapping("/pole/way/query")
    public JsonResultVO<List<Pole>> selectByAddress(String poleAddress) {
        // 定义一个用于返回ajax请求的JSON对象
        JsonResultVO<List<Pole>> jsonResultVO = new JsonResultVO<>();

        // 判断杆塔线路是否为null或空字符串
        if (poleAddress == null || poleAddress == "") {
            jsonResultVO.setMessage("杆塔线路不能为null或空字符");
            return jsonResultVO;
        }

        // 查询
        List<Pole> poles = poleService.selectPoleByAddress(poleAddress);

        // 是否查询到
        if (poles == null) {
            jsonResultVO.setMessage("查找失败！！！");
            return jsonResultVO;
        }
        jsonResultVO.setData(poles);
        jsonResultVO.setMessage("查找成功！！！");
        jsonResultVO.setCode(200);
        return jsonResultVO;
    }

    /**
     * 根据杆塔状态查找杆塔信息
     * @param poleStatus 杆塔状态
     * @return
     */
    @GetMapping("/pole/status/query")
    public JsonResultVO<List<Pole>> selectByStatus(String poleStatus) {

        // 定义一个用于返回ajax请求的JSON对象
        JsonResultVO<List<Pole>> jsonResultVO = new JsonResultVO<>();

        // 判断杆塔状态是否为null或空字符串
        if (poleStatus == null || poleStatus == "") {
            jsonResultVO.setMessage("杆塔状态不能为null或空字符");
            return jsonResultVO;
        }

        // 查询
        List<Pole> poles = poleService.selectPoleByStatus(poleStatus);

        // 是否查询到
        if (poles == null) {
            jsonResultVO.setMessage("查找失败！！！");
            return jsonResultVO;
        }

        jsonResultVO.setData(poles);
        jsonResultVO.setMessage("查找成功！！！");
        jsonResultVO.setCode(200);

        return jsonResultVO;
    }

    /**
     * 根据杆塔信息查找杆塔信息
     * @param pole 杆塔信息
     * @return
     */
    @PostMapping("/pole/query")
    public JsonResultVO<Pole> selectByPole(@RequestBody Pole pole) {
        // 定义一个用于返回ajax请求的JSON对象
        JsonResultVO<Pole> jsonResultVO = new JsonResultVO<>();

        // 判断添加的杆塔信息是否为空
        if (pole == null) {
            jsonResultVO.setMessage("杆塔信息为空！！！");
            jsonResultVO.setData(pole);
            return jsonResultVO;
        }

        // 判断杆塔的编号是否满足10位
        if (!"".equals(pole.getPoleId())) {
            if (pole.getPoleId().length() != 10) {
                jsonResultVO.setMessage("杆塔编号为10位！！！");
                jsonResultVO.setData(pole);
                return jsonResultVO;
            }
        }

        // 查询要添加的杆塔的信息是否存在
        Pole selectPole = poleService.selectByPole(pole);
        if (selectPole != null) {
            jsonResultVO.setMessage("查找成功！！！");
            jsonResultVO.setData(selectPole);
            jsonResultVO.setCode(200);
            return jsonResultVO;
        }

        jsonResultVO.setMessage("查找失败！！！");
        return jsonResultVO;
    }

    /**
     * 查询所有杆塔信息
     * @return
     */
    @GetMapping("/pole/list")
    public List<Pole> listPole() {
        return poleService.selectAll();
    }

}
